home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / simula / books / books.lha / kirkerud / skater.sim < prev    next >
Text File  |  1993-08-16  |  2KB  |  71 lines

  1. ! Proposed solution to exercise 3.9;
  2.  
  3. begin
  4.  
  5.   integer distance, divisor,
  6.           skater, best_skater, 
  7.           minutes, best_minutes;
  8.   Boolean more_skaters;
  9.   real    seconds, points, best_points, best_seconds;
  10.  
  11.   outtext("Enter the distance: "); breakoutimage; inimage;
  12.   distance := inint;
  13.  
  14.   if not (distance =  500 or distance = 1000 or distance =  1500 or
  15.           distance = 3000 or distance = 5000 or distance = 10000)
  16.     then begin
  17.  
  18.         outtext("Illegal distance: "); outint(distance, 0); outimage;
  19.         outtext("Legal distances are");                     outimage;
  20.         outtext("   500, 1500, 5000 and 10000 for men");    outimage;
  21.         outtext("   500, 1000, 1500 and  3000 for women");  outimage;
  22.  
  23.       end of illegal distance
  24.     else begin
  25.  
  26.         outtext("Enter the times used as follows:");              outimage;
  27.         outtext("        7 1.55 for 7 minutes, 1.55 seeconds");   outimage;
  28.         outtext("Enter a negative number after the last skater"); outimage;
  29.  
  30.         divisor := distance/500;
  31.         skater := 0; 
  32.         best_points := 1000;
  33.  
  34.         more_skaters := true;
  35.         while more_skaters do 
  36.           begin
  37.             skater := skater + 1;
  38.             outtext("Enter time for skater nr. "); outint(skater, 0);
  39.             outtext(": "); breakoutimage; inimage;
  40.             minutes := inint;
  41.             if minutes < 0 then more_skaters := false
  42.             else begin
  43.                 seconds := inreal;
  44.                 points := (minutes*60 + seconds)/divisor;
  45.                 outtext("Points: "); outfix(points, 3, 7); outimage;
  46.                 if points < best_points then
  47.                   begin
  48.                     best_points  := points; 
  49.                     best_minutes := minutes; best_seconds := seconds;
  50.                     best_skater := skater; 
  51.                   end of points < best_points;
  52.               end of not minutes < 0;
  53.           end of more_skaters;
  54.  
  55.         outtext("Scores were calculated for "); 
  56.         outint(skater - 1, 0); outtext(" skaters"); outimage;
  57.         if skater > 1 then
  58.           begin
  59.             outtext("The best time: ");
  60.             outint(best_minutes, 0); outtext(" minute");
  61.             if best_minutes > 1 then outtext("s, ") else outtext(", ");
  62.             outfix(best_seconds, 2, 0);
  63.             outtext(" seconds (skater nr. ");
  64.             outint(best_skater, 0); outtext(")"); outimage;
  65.           end of skater > 1;
  66.  
  67.       end of legal distance;
  68.  
  69. end of program
  70.  
  71.